﻿using BarManager.Core.ApplicationService.Interfaces;
using BarManager.Core.BusinessRules.Interfaces.Validator;
using BarManager.Core.DomainModel;
using BarManager.Core.DomainService;
using BarManager.Core.Entity;
using System;
using System.Collections.Generic;

namespace BarManager.Core.ApplicationService
{
    public class PromocionService : BaseApplicationService<Promocion>, IPromocionService
    {
        public PromocionService(IObjectContext context, IPromocionRepository repository, IPromocionValidator validator)
            : base(context,repository, validator)
        {           
        }

        public IEnumerable<Promocion> GetAllActivas()
        {
            DateTime fechaActual = new DateTime(1900, 1, 1, DateTime.Now.Hour, DateTime.Now.Minute, 0);
            int dia = (int)DateTime.Now.DayOfWeek;

            //- Recuperamos las promociones del dia de hoy
            var promociones = base.Find(x =>
                  (
                      //- Que la promocion este habilitada para el dia de hoy
                      (dia == 0 && x.Domingo) ||
                      (dia == 1 && x.Lunes) ||
                      (dia == 2 && x.Martes) ||
                      (dia == 3 && x.Miercoles) ||
                      (dia == 4 && x.Jueves) ||
                      (dia == 5 && x.Viernes) ||
                      (dia == 6 && x.Sabado)
                  )
              );

            List<Promocion> listado = new List<Promocion>();

            //- Revisar logica CASO 1: Hs actual 19:01 - MA MI JUE VI Inicio 21 a 01 AM y me muestra q hay activas cuando no deberia
            //-                CASO 2:  


            //- Incrementamos Hasta si desde es mayor   
            foreach (var item in promociones)
            {
                if (item.HoraInicio > item.HoraFin)
                { if (fechaActual >= item.HoraInicio && fechaActual <= item.HoraFin.AddDays(1)) listado.Add(item); }
                else
                { if (fechaActual >= item.HoraInicio && fechaActual <= item.HoraFin) listado.Add(item); }
            }


            //- Validamos rango de fechas
            return listado;
        }       
    }
}
